package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.CourseScheduleEntity;
import com.tfjybj.itoo.teach.model.ArrangeCourseModel;
import com.tfjybj.itoo.teach.model.ClassModel;
import com.tfjybj.itoo.teach.model.CourseIsArrangedModel;
import com.tfjybj.itoo.teach.model.CourseScheduleModel;

import java.util.List;
import java.util.Map;


/**
 * CourseScheduleService接口
 * courseSchedule表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface CourseScheduleService extends BaseServicePlus<CourseScheduleEntity> {
	
	//region 模板生成：模糊查询
	//endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 添加排课信息
     * @param arrangeCourseModel 排课实体
     * @return 返回排课成功的条数（每周节次数*行政班数量）
     * @author 杨晓慧
     * @since 2.0.0 2018-11-18 14:10:10
     */
    boolean insertArrangeCourseInfo(ArrangeCourseModel arrangeCourseModel);


     /**
     * 查询排课已占用情况
     * @param conditionMap  排课状态信息集和（起始周次，行政班id, 教师id, 教室id）
     * @return  返回已经被占用的星期周次集和
     * @author 杨晓慧
     * @since 2.0.0 2018-11-18 14:10:10
     */
    List<CourseScheduleModel> queryArrangeCourseInfo(Map conditionMap);

    /**
     * 根据班级_id查询的所有待排课程     *
     * @param classId  班级_id
     * @return courseAllList
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<CourseIsArrangedModel>  queryCourseAllByClassId(String classId);

    /**
     * 根据StudentId查询的课程表
     * @param classId 学生ID
     * @return courseScheduleList
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<CourseScheduleModel> queryCourseScheduleByClassId(String classId);

    /**
     * 根据teacherId查询的课程表     *
     * @param teacherId 教师ID
     * @return courseScheduleList
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<CourseScheduleModel> queryCourseScheduleByTeacherId(String teacherId);

    /**
     * 根据上课班id集合来查询课程id集和
     * @param teachClassList 上课班id集和
     * @return 课程id集和
     * @author 杨晓慧
     * @since 2.0.0 2018-11-08 20:35:10
     */
    List<String> queryCourseIdsByTeachClassIds(List<String> teachClassList);


    /**
     * 根据id集合来查询课程表集和
     * @param ids 课程id集和
     * @return 课程表集和_listCourseScheduleModel
     * @author 田成荣
     * @since 2.0.0 2018-11-08 20:35:10
     */
    List<CourseScheduleModel> queryCourseScheduleByIds(List<String> ids);


    /**
     * 根据ID查找单个实体
     *
     * @param pageNo   页码
     * @param pageSize 每页条数
     * @return 实体集合
     * @author 杨晓慧
     * @since 2.0.0 2018-11-20 10:35:10
     */
      PageInfo<CourseScheduleModel> queryPageCourseAll(int pageNo, int pageSize);


    /**
     * 高级搜索条件查询课表信息
     * @param strLikeMap 教师，班级，课程信息Map
     * @return 课程表信息列表
     * @author 杨晓慧
     * @since 2.0.0 2018年11月27日11:00:25
     */

      PageInfo<CourseScheduleModel> queryScheduleByStrLike(Map strLikeMap, int pageNo, int pageSize);


    /**
     * 根据课程id来查询课表信息
     * @param courseId 课程id
     * @return 课程表信息
     * @author 杨晓慧
     * @since 2.0.0 2018年11月20日15:43:24
     */
      List<CourseScheduleModel> queryScheduleByCourseId(String courseId);

    /**
     * 根据学院名称和专业名称查询行政班信息
     * @param strLike 模糊查询字段
     * @return 行政班列表
     * @author 杨晓慧
     * @since 2.0.0 2018年11月22日14:43:20
     */
      List<ClassModel> queryClassByAcmOrPfs(String strLike, String academyId);


    /**
     * 根据学生id确定学生的所在所有上课班id集合
     * @param studentId 学生id
     * @return 所在的上课班id集和
     * @author 杨晓慧
     * @since 2.0.0 2018年11月28日15:01:10
     */
    List <String> queryTechClassIdByStudentId(String studentId);


    /**
     * 根据上课班id集和查询课程表信息
     * @param teachClassIds 上课班id集和
     * @return 课程表信息列表
     * @author 杨晓慧
     * @since 2.0.0 2018-11-28 15:45:08
     */
    List<CourseScheduleModel> queryCourseScheduleByTeachClassIds(List<String> teachClassIds);


    /**
     * 根据教室id查询该班级的课表情况
     * @param roomId 教室id
     * @return 返回该教室课表清空
     * @author 杨晓慧
     * @since 2.0.0 2018年12月3日15:40:30
     */
    List<CourseScheduleModel> queryCourseScheduleByRoomId(String roomId);

    /**
     * 根据班级_id模糊查询courseSchedule
     *
     * @param classId  班级_id
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的courseSchedule
     * @author 智雪艳
     * @since 2.0.0 2019-05-30 10:35:56
     */
    PageInfo<CourseScheduleEntity> queryCourseScheduleByLikeClassId(String classId, Integer pageNo, Integer pageSize);

    /**
     * 根据id查找CourseSchedule
     *
     * @param courseId 主键courseId
     * @author 智雪艳
     * @since 2.0.0 2019-05-30 10:35:56
     */
    String findByCourseId(String courseId);

    /**
     * 无参查询查找CourseSchedule
     *
     * @return courseScheduleEntity
     * @author 智雪艳
     * @since 2.0.0 2019-05-30 10:35:56
     */
    List<CourseScheduleEntity> queryCourse();
}
